<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://kadm.com.ua/XMLSchema/Grammar" xmlns:parser="http://kadm.com.ua/XMLSchema/Parser"
  xmlns:lax="http://kadm.com.ua/XMLSchema/Lax">
  <xsl:output method="xml" indent="no"/>
  <xsl:preserve-space elements="*"/>

  <xsl:template match="*">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="group | rule">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:attribute name="parser:state">
        <xsl:value-of
          select="count(preceding::group | preceding::rule | ancestor::group | ancestor::rule) + 1"
        />
      </xsl:attribute>
      <xsl:if test="name() = 'terminal'">
        <xsl:attribute name="parser:number">
          <xsl:value-of select="count(preceding::terminal) + 1"/>
        </xsl:attribute>
      </xsl:if>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="terminal">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:attribute name="parser:number">
        <xsl:value-of select="count(preceding::terminal) + 1"/>
      </xsl:attribute>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
